/**
 * Progetto prog. Oggetti 2014
 * 
 * Cecconello 		- 		Gaffo 		- 		Buzzi
 * 10032664     	-		10023255	-		10022949
 * 
 * La classe Amministratore si occupa di gestire tutte il gioco
 * 
 */




import java.util.ArrayList;

import jbook.util.Input;


public class Amministratore {

	public final static int ROWS = 7;
	public final static int COLUMS = 7;
	public static int CICLO = 0;
	public static int CLOCK = 0;
	public static Arma ascia;
	public static Giocatore player;
	public static Prigione p;
	public static ArrayList<Inanimati> poz = new ArrayList<Inanimati>();

	/**
	 * Cliclo principale per gestire il gioco
	 * 
	 */
	public static void main(String[] args) {
		int x, y;
		ascia = new Arma("ascia", 30);
		p = new Prigione(ROWS, COLUMS);	
		player = new Giocatore(100, new Arma("spada", 35));
		p.creaStanza();
		
		//elenco dei comandi per muovere il giocatore
		System.out.println("ELENCO DEI COMANDI: ");
		System.out.println("'z' lo muove a (x-1,y-1)");
		System.out.println("'x' lo muove a (x,y-1)");
		System.out.println("'c' lo muove a (x+1,y-1)");
		System.out.println("'a' lo muove a (x-1,y)");
		System.out.println("'s' lo muove a (x,y)");
		System.out.println("'d' lo muove a (x+1,y)");
		System.out.println("'q' lo muove a (x-1,y+1)");
		System.out.println("'w' lo muove a (x,y+1)");
		System.out.println("'e' lo muove a (x+1,y+1)");
		System.out.println("L load -- P exit -- M salva");

		char b = 0;
		do {
			/*
			 * stampa della stanza nella versione 'disonesta'
			 * per la visualizzazione della versione 'onesta'
			 * cambiare in p.visualizzaStanza();
			*/
			p.visualizzaStanzaCompleta(); 
			
			System.out.println("\nLife  : "+player.getLife());
			
			
			b = Input.readChar();
			switch (b) {
			case 'w': // caso moveup
				x = p.getPosx(player);
				y = p.getPosy(player);
				if ((!((x - 1) == -1)) && (!(p.findWall(x - 1, y)))) {
					if (p.victory(x - 1, y)) {
						b = 'k';
						System.out.println("Ti sei mosso!");
						player.powerUP();
					} else if (p.findMonster(x - 1, y)) {
						System.out.println("c'e' un mostro");
						player.combattimento((Attore) Prigione.getEl(x - 1, y));
						System.out.println("Ti sei mosso!");
						player.powerUP();
					}
					player.moveUp(x, y);
				}
				Mostro.moveMonster();
				CICLO++;
				break;
			case 'x': // caso movedown
				x = p.getPosx(player);
				y = p.getPosy(player);
				if ((!((x + 1) == ROWS)) && (!(p.findWall(x + 1, y)))) {
					if (p.victory(x + 1, y)) {
						b = 'k';
						System.out.println("Ti sei mosso!");
						player.powerUP();
					} else if (p.findMonster(x + 1, y)) {
						System.out.println("c'e' un mostro");
						player.combattimento((Attore) Prigione.getEl(x + 1, y));
						System.out.println("Ti sei mosso!");
						player.powerUP();
					}
					player.moveDown(x, y);
				}
				Mostro.moveMonster();
				CICLO++;
				break;
			case 'd': // caso moveright
				x = p.getPosx(player);
				y = p.getPosy(player);
				if ((!((y + 1) == COLUMS)) && (!(p.findWall(x, y + 1)))) {
					if (p.victory(x, y + 1)) {
						b = 'k';
						System.out.println("Ti sei mosso!");
						player.powerUP();
					} else if (p.findMonster(x, y + 1)) {
						System.out.println("c'e' un mostro");
						player.combattimento((Attore) Prigione.getEl(x, y + 1));
						System.out.println("Ti sei mosso!");
						player.powerUP();
					}
					player.moveRight(x, y);
				}
				Mostro.moveMonster();
				CICLO++;
				break;
			case 'a': // caso moveleft
				x = p.getPosx(player);
				y = p.getPosy(player);
				if ((!((y - 1) == -1)) && (!(p.findWall(x, y - 1)))) {
					if (p.victory(x, y - 1)) {
						b = 'k';
						System.out.println("Ti sei mosso!");
						player.powerUP();
					} else if (p.findMonster(x, y - 1)) {
						System.out.println("c'e' un mostro");
						player.combattimento((Attore) Prigione.getEl(x, y - 1));
						System.out.println("Ti sei mosso!");
						player.powerUP();
					}
					player.moveLeft(x, y);
				}
				Mostro.moveMonster();
				CICLO++;
				break;
			case 'q': // caso upleft
				x = p.getPosx(player);
				y = p.getPosy(player);
				if ((!(((y - 1) == -1) || ((x - 1) == -1)))
						&& (!(p.findWall(x - 1, y - 1)))) {
					if (p.victory(x - 1, y - 1)) {
						b = 'k';
						System.out.println("Ti sei mosso!");
						player.powerUP();
					} else if (p.findMonster(x - 1, y - 1)) {
						System.out.println("c'e' un mostro");
						player.combattimento((Attore) Prigione.getEl(x - 1,
								y - 1));
						System.out.println("Ti sei mosso!");
						player.powerUP();
					}
					player.upLeft(x, y);
				}
				Mostro.moveMonster();
				CICLO++;
				break;
			case 'e': // caso upright
				x = p.getPosx(player);
				y = p.getPosy(player);
				if ((!(((x - 1) == -1) || ((y + 1) == COLUMS)))
						&& (!(p.findWall(x - 1, y + 1)))) {
					if (p.victory(x - 1, y + 1)) {
						b = 'k';
						System.out.println("Ti sei mosso!");
						player.powerUP();
					} else if (p.findMonster(x - 1, y + 1)) {
						System.out.println("c'e' un mostro");
						player.combattimento((Attore) Prigione.getEl(x - 1,
								y + 1));
						System.out.println("Ti sei mosso!");
						player.powerUP();
					}
					player.upRight(x, y);
				}
				Mostro.moveMonster();
				CICLO++;
				break;
			case 'z': // caso downleft
				x = p.getPosx(player);
				y = p.getPosy(player);
				if ((!(((y - 1) == -1) || ((x + 1) == ROWS)))
						&& (!(p.findWall(x + 1, y - 1)))) {
					if (p.victory(x + 1, y - 1)) {
						b = 'k';
						System.out.println("Ti sei mosso!");
						player.powerUP();
					} else if (p.findMonster(x + 1, y - 1)) {
						System.out.println("c'e' un mostro");
						player.combattimento((Attore) Prigione.getEl(x + 1,
								y - 1));
						System.out.println("Ti sei mosso!");
						player.powerUP();
					}
					player.downLeft(x, y);
				}
				Mostro.moveMonster();
				CICLO++;
				break;
			case 'c': // caso downright
				x = p.getPosx(player);
				y = p.getPosy(player);
				if ((!(((y + 1) == COLUMS) || ((x + 1) == ROWS))) && (!(p.findWall(x + 1, y + 1)))) {
					if (p.victory(x + 1, y + 1)) {
						b = 'k';
						System.out.println("Ti sei mosso!");
						player.powerUP();
					} else if (p.findMonster(x + 1, y + 1)) {
						System.out.println("c'e' un mostro");
						player.combattimento((Attore) Prigione.getEl(x + 1,
								y + 1));
						System.out.println("Ti sei mosso!");
						player.powerUP();
					}
					player.downRight(x, y);
				}
				Mostro.moveMonster();
				CICLO++;
				break;
			case 's':
				System.out.println("Nessun movimento!");
				break;
			case 'p':
				b = 'p';
				System.out.println("Gioco terminato! Avevi paura di perdere? :)");
				break;
			case 'm':
				p.save();
				System.out.println("Stato del gioco salvato con successo!");
				break;
			case 'l':
				p.load();
				System.out.println("Caricato con successo!");
				break;
			default:
				System.out.println("Riprovare!");
				break;
			}
			rimuoviMostri();
			if (CICLO % 3 == 0)
				CLOCK++;
			if ((player.getLife() == 0) || (player.getLife() < 0)) {
				b = 'p';
				System.out.println("Hai perso");
			}

		} while ((b != 'p') && (b != 'k'));

		if (b == 'k') {
			System.out.println("Hai vinto!");
			p.visualizzaStanzaCompleta();
		}
	}
	
	public static void rimuoviMostri() {
		for (int x = 0; x < ROWS; x++) {
			for (int y = 0; y < COLUMS; y++) {
				if (Prigione.getEl(x, y) instanceof Mostro) {
					Mostro morto = (Mostro) Prigione.getEl(x, y);
					if (morto.getLife() <= 0) {
						Prigione.setEl(x, y, new Vuoto());
					}
				}
			}
		}
	}
}